/**
题目:
给定一个二叉树，返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

输入:

   1
 /   \
2     3
 \
  5

输出: ["1->2->5", "1->3"]

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/binary-tree-paths
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
思路: dfs
*/
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func binaryTreePaths(root *TreeNode) []string {
    if root == nil{
        return []string{}
    }
    if root.Left == nil && root.Right == nil{
        return []string{strconv.Itoa(root.Val)}
    }
    res := make([]string, 0)
    if root.Left != nil{
        helper(&res,strconv.Itoa(root.Val), root.Left)
    }
    if root.Right != nil{
        helper(&res,strconv.Itoa(root.Val), root.Right)
    }
    return res
}
func helper(res *[]string,path string, root *TreeNode){
    if root != nil && root.Left == nil && root.Right == nil{
        *res = append(*res, path + "->" + strconv.Itoa(root.Val))
        return 
    }
    if root.Left != nil{
        helper(res, path + "->" + strconv.Itoa(root.Val), root.Left)
    }
    if root.Right != nil{
        helper(res, path + "->" + strconv.Itoa(root.Val), root.Right)
    }
}